package com.github.cakin.shiro.chapter22.dao;

import com.github.cakin.shiro.chapter22.entity.Organization;

import java.util.List;

/**
 * @className: OrganizationDao
 * @description: 组织DAO
 * @date: 2020/5/25
 * @author: cakin
 */
public interface OrganizationDao {
    /**
     * 功能描述：创建一个组织
     *
     * @param organization 组织
     * @return Organization 组织
     * @author cakin
     * @date 2020/5/25
     */
    Organization createOrganization( Organization organization );

    /**
     * 功能描述：更新一个组织
     *
     * @param organization 组织
     * @return Organization 组织
     * @author cakin
     * @date 2020/5/25
     */
    Organization updateOrganization( Organization organization );

    /**
     * 功能描述：根据组织id删除该组织以及它的所有孩子
     *
     * @param organizationId 组织Id
     * @author cakin
     * @date 2020/5/25
     */
    void deleteOrganization( Long organizationId );

    /**
     * 功能描述：根据组织id查找一个组织
     *
     * @param organizationId 组织Id
     * @author cakin
     * @return Organization 组织
     * @date 2020/5/25
     */
    Organization findOne( Long organizationId );

    /**
     * 功能描述：列式所有组织
     *
     * @author cakin
     * @return List<Organization> 组织列表
     * @date 2020/5/25
     */
    List<Organization> findAll();

    /**
     * 功能描述：排除某个组织
     *
     * @author cakin
     * @param excludeOraganization 排除该组织
     * @return List<Organization> 组织列表
     * @date 2020/5/25
     */
    List<Organization> findAllWithExclude( Organization excludeOraganization );

    /**
     * 功能描述：组织表更
     *
     * @param source 变更前组织
     * @param target 变更后的组织
     * @author cakin
     * @date 2020/5/25
     * @description:
     */
    void move( Organization source, Organization target );
}
